package com.htmlparser;

import org.htmlparser.Node;
import org.htmlparser.nodes.TextNode;
import org.htmlparser.tags.BodyTag;
import org.htmlparser.tags.Div;
import org.htmlparser.tags.FormTag;
import org.htmlparser.tags.ImageTag;
import org.htmlparser.tags.InputTag;
import org.htmlparser.tags.LabelTag;
import org.htmlparser.tags.LinkTag;
import org.htmlparser.tags.ParagraphTag;
import org.htmlparser.tags.SelectTag;
import org.htmlparser.tags.Span;
import org.htmlparser.tags.TableTag;
import org.htmlparser.tags.TextareaTag;
import org.htmlparser.util.NodeList;
import org.jdom.Element;

public class AllTags {
 
	// 综合标签处理
	public static Element doAllTags(NodeList nodeList, Element element) {
		System.out.println("");
		System.out.println("##################  解析所有标签开始  ###################");
		System.out.println("");
		if (nodeList != null) {
			for (int i = 0; i < nodeList.size(); i++) {
				Node node = nodeList.elementAt(i);
				
				//当前标签的下一个标签
				Node nextNode = null;          
				if ((i + 1) < nodeList.size()) {
					nextNode = nodeList.elementAt(i + 1);
				}
				
				//当前标签的上一个标签
				Node lastNode = null;
				if (i > 0) {
					lastNode = nodeList.elementAt(i - 1);
				}
				
				// 处理<body>
				if ((node instanceof BodyTag)) {
					String s = ((BodyTag) node).getBody();
				}
				
				// 处理<img>
				else if ((node instanceof ImageTag)) {
					
				}
				
				// 处理<label>
				//<label>标签前后如果是<input>标签，则不处理该<label>标签
				else if ((node instanceof LabelTag)
						&& (!(nextNode instanceof InputTag))
						&& (!(lastNode instanceof InputTag))) {

					Element label = MyParse62.getLabel2((LabelTag) node);
					if (label != null) {
						element.addContent(label);
					}
				}

				// 处理超链接<a>
				else if (node instanceof LinkTag) {
					Element link = MyParse62.getLink((LinkTag) node);
					if (link != null) {
						element.addContent(link);
					}
				}

				// 处理输入表单<input>
				else if (node instanceof InputTag) {
					Element input = Input.getInput((InputTag) node, nextNode);

					if (input != null) {
						element.addContent(input);
					}
				}

				// 处理多行文本域<textarea>
				else if (node instanceof TextareaTag) {
					Element textarea = MyParse62.getTextarea((TextareaTag) node);
					if (textarea != null) {
						element.addContent(textarea);
					}
				}

				// 处理下拉列表<select>
				else if (node instanceof SelectTag) {
					Element select = MyParse62.getSelect((SelectTag) node);
					if (select != null) {
						element.addContent(select);
					}
				}

				// 处理表格<table>
				else if (node instanceof TableTag) {
					if (MyParse62.getTable((TableTag) node) != null) {
						Element table = MyParse62.getTable((TableTag) node);
						if (table != null) {
							element.addContent(table);
						}
					}
				}

				// 处理<div>
				else if (node instanceof Div) {
					try {
						MyParse62.getDiv((Div) node, element);
					} catch (Exception ex) {
						ex.printStackTrace();
					}
				}

				// 处理<span>
				else if (node instanceof Span) {
					Element span = MyParse62.getSpan((Span) node,element);
					if (span != null) {
						element.addContent(span);
					}
				}

				// 处理段落<p>
				else if (node instanceof ParagraphTag) {
					MyParse62.getP((ParagraphTag) node, element);
				}
				
				// 处理纯文本
				//如果该纯文本前后是<input>标签,则不处理该纯文本
				else if ((node instanceof TextNode)
						&& (!(node.getText().trim().equals("")))
						&& (!(nextNode instanceof InputTag))
						&& (!(lastNode instanceof InputTag))) {
					
					Element text = MyParse62.getText2((TextNode) node);
					if (text != null) {
						element.addContent(text);
					}
				}

				// 处理<form>
				else if (node instanceof FormTag) {
					Element form = MyParse62.getForm((FormTag) node);
					if (form != null) {
						element.addContent(form);
					}
				}
			}
		}
		System.out.println("");
		System.out.println("################  解析所有标签结束  ################");
		System.out.println("");
		
		return element;
	}
	
	//================================================
	public static void MyGet2(NodeList nl, Element e) {
		for (int i = 0; i < nl.size(); i++) {
			// divNode: 某个没有嵌套在table里的div
			Node divNode = nl.elementAt(i);

			if ((divNode != null) && (divNode instanceof Div)) {
				NodeList nodeList = divNode.getChildren();
				for (int j = 0; j < nodeList.size(); j++) {
					Node node = nodeList.elementAt(j);
					Node nextNode = null;
					if ((i + 1) < nl.size()) {
						nextNode = nl.elementAt(i + 1);
					}

					Node lastNode = null;
					if (i > 0) {
						lastNode = nodeList.elementAt(i - 1);
					}

					if (node != null) {
						if ((node instanceof BodyTag)) {
							String s = ((BodyTag) node).getBody();
						}
						// 处理label
						else if ((node instanceof LabelTag)
								&& (!(nextNode instanceof InputTag))
								&& (!(lastNode instanceof InputTag))) {

							Element label = MyParse62.getLabel2((LabelTag) node);
							if (label != null) {
								e.addContent(label);
							}
						}

						// 处理超链接
						else if (node instanceof LinkTag) {
							Element link = MyParse62.getLink((LinkTag) node);
							if (link != null) {
								e.addContent(link);
							}

							// }
						}

						// 处理输入表单input
						else if (node instanceof InputTag) {
							Element input = Input.getInput((InputTag) node,
									nextNode);

							if (input != null) {
								e.addContent(input);
							}
						}

						// 处理多行文本域textarea
						else if (node instanceof TextareaTag) {
							Element textarea = MyParse62.getTextarea((TextareaTag) node);
							e.addContent(textarea);
						}

						// 处理下拉列表
						else if (node instanceof SelectTag) {
							Element select = MyParse62.getSelect((SelectTag) node);
							e.addContent(select);
						}

						// 处理表格table
						else if (node instanceof TableTag) {
							if (MyParse62.getTable((TableTag) node) != null) {
								Element table = MyParse62.getTable((TableTag) node);
								e.addContent(table);
							}
						}

						// 处理div
						// else if (node instanceof Div) {
						// try {
						// getDiv((Div)node, e);
						// } catch (Exception ex) {
						// ex.printStackTrace();
						// }
						// }

						else if (node instanceof Span) {
//							Element span = MyParse62.getSpan((Span) node);
//							if (span != null) {
//								e.addContent(span);
//							}
						}

						// <p>
						else if (node instanceof ParagraphTag) {
							MyParse62.getP((ParagraphTag) node, e);
						}
						// 纯文本
						else if ((node instanceof TextNode)
								&& (!(node.getText().trim().equals("")))
								&& (!(nextNode instanceof InputTag))) {
							Element text = MyParse62.getText2((TextNode) node);
							e.addContent(text);
						}

						// 处理form
						else if (node instanceof FormTag) {
							Element form = MyParse62.getForm((FormTag) node);
							e.addContent(form);
						}
					}
				}
			}
		}
	}
}
